package JavaBase;

import org.junit.Test;

/**
 * Created by 王念 on 2016/3/26.
 */
public class VolatileTest {
    /**
     * 博客地址：http://my.oschina.net/wangnian/blog/648007
     * volatile表示每个线程拿主内存的最新的 data变量
     */
    private volatile   int data = 0;
    private  int data1 = 0;
    @Test
    public void test1(){
        final VolatileTest obj = new VolatileTest();
        //创建1000个线程对变量data进行加1操作
        for(int i=0;i<10;i++){
            new Thread(){
                @Override
                public void run(){
                    try{
                        Thread.sleep(1);
                        obj.data++;
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
            }.start();
        }
        //打印结果
        System.out.println("data:"+obj.data);
    }

    @Test
    public  void test2(){
        //创建1000个线程对变量data进行加1操作
        for(int i=0;i<20;i++){
            new Thread(){
                @Override
                public void run(){
                    try{
                        synchronized (this){
                            data1++;
                        }
                    }catch(Exception e){
                        e.printStackTrace();
                    }
                }
            }.start();
        }
        //打印结果
        System.out.println("data1:"+data1);
    }



}
